public class Liste { public Object data; public Liste next; public Liste(Object data) { this.data = data; // ^ ^- data-Variable aus der Methode // |- data-Property aus dem Objekt } public void append(Liste l) { Liste helper; // this ist das Objekt von dem die Methode aufgerufen wird // im Beispiel unten "testliste" for (helper = this; helper.next != null; helper=helper.next) {} // Am Ende der for-Schleife ist helper das letzte Objekt der Liste // helper.next ist in dem Moment null helper.next = l; } // zweite (überladene / overloaded) append()-Methode zur Bequemlichkeit public void append(Object o) { append( new Liste( o ) ); // ^ ^- Übergebenes Argument // |- Aufruf der anderen append()-Methode mit Argument "Liste" } public String toString() { // toString gibt es "stillschweigend" in jeder Klasse // will man, dass es eine sinnvolle Ausgabe erzeugt // kann man es einfach mit einer eigenen Deklaration "überlagern" / "override" Liste helper; String r = ""; for (helper = this; helper != null; helper = helper.next) { r += "" + helper.data; if ( helper.next != null ) { r += ", "; } } return r; } public static void main(String[] args) { System.out.println("== Klasse: Liste =="); Liste testliste; Liste helper; testliste = new Liste("Sylvia"); // append()-Methode auf Objekt testliste // Der Name "testliste" ist ein Bezeichner aus der main()-Methode // im Methodenaufruf append() steht er als "this" zur Verfügung testliste.append( new Liste("Denil") ); testliste.append( "Jonas" ); // Überladene, vereinfachte append()-Methode testliste.append( "Florian" ); System.out.println("testliste: " + testliste); System.out.println("\nSchleifendurchlauf (Iteration über alle Listenobjekte):"); for ( helper = testliste; helper != null ; helper = helper.next ) { System.out.println(helper.data); } } }